package controllers;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.servlet.http.HttpSession;

import org.primefaces.event.RowEditEvent;
import org.primefaces.event.TransferEvent;
import org.primefaces.model.DualListModel;

import services.ServicioAdicionalXSalonService;
import services.SalonService;
import services.ServicioAdicionalService;
import modelo.Menu;
import modelo.Salon;
import modelo.Servicioadicional;
import modelo.Servicioadicionalxsalon;
import modelo.ServicioadicionalxsalonId;


@ManagedBean(name="servicioadicionalxsalonBean")
@ViewScoped
public class ServicioAdicionalXSalonBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4237552358568778868L;
	
	@ManagedProperty("#{servicioAdicionalXSalonService}")
	private ServicioAdicionalXSalonService servicioadicionalxsalonService;
	private Servicioadicionalxsalon servicioadicionalxsalon = new Servicioadicionalxsalon();
	private float precio = 0;
	private Servicioadicionalxsalon servicio = new Servicioadicionalxsalon();
	private List<Servicioadicionalxsalon> listServicioAdicionalXSalon = new ArrayList<Servicioadicionalxsalon>();
	private List<Servicioadicionalxsalon> listServAdicXSalonALlenar = new ArrayList<Servicioadicionalxsalon>();
	private Servicioadicionalxsalon servicioadicionalxsalonSelected = new Servicioadicionalxsalon();

	@ManagedProperty("#{salonService}")
    private SalonService serviceSalon;
	private Salon salon=new Salon();	
	private List<Salon> listSalones = new ArrayList<Salon>();
	private Salon selectedSalon=new Salon();
	
	@ManagedProperty("#{servicioadicionalService}")
    private ServicioAdicionalService serviceServicioAdicional;
	private List<Servicioadicional> listServicioAdicional = new ArrayList<Servicioadicional>();
	private Servicioadicional selectedServicioAdicional=new Servicioadicional();
	
	public ServicioAdicionalXSalonBean() {
		super();
	}

	@PostConstruct
	public void init(){
		listServicioAdicional = serviceServicioAdicional.getListaServicioAdicionales();
		listSalones = serviceSalon.getListaSalones();
		
        FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();
        HttpSession sessionActual = (HttpSession) context.getExternalContext().getSession(false);
        Integer salonSel = null;
        
        if (sessionActual!= null)
        {  salonSel = Integer.parseInt(sessionActual.getAttribute("salon").toString());             
        
              salon=serviceSalon.obtenerSalon(salonSel);
        }
        else
        {
        	
        	
        }		
        listServicioAdicionalXSalon = servicioadicionalxsalonService.obtenerServicioAdicionalXSalon(salon.getIdSalon());        
	}

	public List<Salon> getListSalones() {
		return listSalones;
	}

	public void setListSalones(List<Salon> listSalones) {
		this.listSalones = listSalones;
	}

	public Salon getSelectedSalon() {
		return selectedSalon;
	}

	public void setSelectedSalon(Salon selectedSalon) {
		this.selectedSalon = selectedSalon;
	}

	public List<Servicioadicional> getListServicioAdicional() {
		return listServicioAdicional;
	}

	public void setListServicioAdicional(
			List<Servicioadicional> listServicioAdicional) {
		this.listServicioAdicional = listServicioAdicional;
	}

	public Servicioadicional getSelectedServicioAdicional() {
		return selectedServicioAdicional;
	}

	public void setSelectedServicioAdicional(
			Servicioadicional selectedServicioAdicional) {
		this.selectedServicioAdicional = selectedServicioAdicional;
	}

	public float getPrecio() {
		return precio;
	}

	public void setPrecio(float precio) {
		this.precio = precio;
	}
	
	public ServicioAdicionalXSalonService getServicioadicionalxsalonService() {
		return servicioadicionalxsalonService;
	}
	public void setServicioadicionalxsalonService(
			ServicioAdicionalXSalonService servicioadicionalxsalonService) {
		this.servicioadicionalxsalonService = servicioadicionalxsalonService;
	}

	public Servicioadicionalxsalon getServicioadicionalxsalon() {
		return servicioadicionalxsalon;
	}

	public void setServicioadicionalxsalon(
			Servicioadicionalxsalon servicioadicionalxsalon) {
		this.servicioadicionalxsalon = servicioadicionalxsalon;
	}

	public SalonService getServiceSalon() {
		return serviceSalon;
	}

	public void setServiceSalon(SalonService serviceSalon) {
		this.serviceSalon = serviceSalon;
	}

	public ServicioAdicionalService getServiceServicioAdicional() {
		return serviceServicioAdicional;
	}

	public void setServiceServicioAdicional(
			ServicioAdicionalService serviceServicioAdicional) {
		this.serviceServicioAdicional = serviceServicioAdicional;
	}

	public Servicioadicionalxsalon getServicio() {
		return servicio;
	}

	public void setServicio(Servicioadicionalxsalon servicio) {
		this.servicio = servicio;
	}

	public List<Servicioadicionalxsalon> getListServicioAdicionalXSalon() {
		return listServicioAdicionalXSalon;
	}

	public void setListServicioAdicionalXSalon(
			List<Servicioadicionalxsalon> listServicioAdicionalXSalon) {
		this.listServicioAdicionalXSalon = listServicioAdicionalXSalon;
	}
	
	public void agregarServicio() {
		servicioadicionalxsalon.setSalon(salon);
		servicioadicionalxsalon.setServicioadicional(selectedServicioAdicional);
		listServAdicXSalonALlenar.add(servicioadicionalxsalon);
		servicioadicionalxsalon = new Servicioadicionalxsalon();
	}	
	
	public void eliminarServicio() {
		this.listServAdicXSalonALlenar.remove(servicioadicionalxsalonSelected);
	}

	public Servicioadicionalxsalon getServicioadicionalxsalonSelected() {
		return servicioadicionalxsalonSelected;
	}

	public void setServicioadicionalxsalonSelected(
			Servicioadicionalxsalon servicioadicionalxsalonSelected) {
		this.servicioadicionalxsalonSelected = servicioadicionalxsalonSelected;
	}	
	
	public String guardarServicioAdicionalXSalon() throws Exception
	{
		
//		servicioadicionalxsalon.setSalon(selectedSalon);
//		servicioadicionalxsalon.setServicioadicional(selectedServicioAdicional);
//		servicioadicionalxsalon.setPrecio(precio);
//		servicioadicionalxsalonService.guardarServicioAdicionalXSalon(servicioadicionalxsalon);
//		servicioadicionalxsalon = new Servicioadicionalxsalon();
		servicioadicionalxsalonService.guardarServicioAdicionalXSalon(listServAdicXSalonALlenar);
		listServAdicXSalonALlenar=new ArrayList<>();
		return "ServicioRegistrado";
	}

	public List<Servicioadicionalxsalon> getListServAdicXSalonALlenar() {
		return listServAdicXSalonALlenar;
	}

	public void setListServAdicXSalonALlenar(
			List<Servicioadicionalxsalon> listServAdicXSalonALlenar) {
		this.listServAdicXSalonALlenar = listServAdicXSalonALlenar;
	}
	
	public String nuevoServicio()
	{
		
		return "AgregarServicio";
	}

	public Salon getSalon() {
		return salon;
	}

	public void setSalon(Salon salon) {
		this.salon = salon;
	}	
	
}